#include <sys/time.h>
#include <stddef.h>
#include <stdlib.h>
#include "app_common.h"
#include <stdio.h>
#include <string.h>
long app_common_getCurrentTime()
{
    // 声明用于保存时间数据的结构体
    struct timeval tv;
    // 获取当前时间
    gettimeofday(&tv, NULL);
    // 返回当前时间（秒）
    return tv.tv_sec*1000 + tv.tv_usec/1000;
    // tv_sec: 秒  tv_usec: 微秒
}
/**
 * @brief 将字符数组转换为对应的十六进制字符串 十进只制转十六进制
 * @param chars 字符数组
 * @param chars_len 字符数组数据长度
 * @return char* 十六进制字符串
 */
char *app_common_charsToHexstr(char *chars, int chars_len)
{
    // TODO: 将字符数组转换为对应的十六进制字符串
    //定义一个字符数组用于存储转换后的十六进制字符串
    char *hexstr = (char *)malloc(chars_len * 2 + 1);
    //将字符数组转换为对应的十六进制字符串
    for (int i = 0; i < chars_len; i++)
    {
        sprintf(hexstr + i * 2, "%02X", chars[i]);
    }
    //字符串添加借宿符号'\0'、
    hexstr[chars_len * 2] = '\0';
    return hexstr;
    
}

/**
 * @brief 将十六进制字符串转换为对应的字符数组
 * @param hexstr 十六进制字符串
 * @param chars_len 接收字符数组数据长度的指针
 * @return char* 字符数组
 */
char *app_common_hexstrToChars(char *hexstr, int *chars_len)
{
    
        // 十六进制字符串长度
        int hexstr_len = strlen(hexstr);
        // 保存字符数组的长度
        *chars_len = hexstr_len / 2;
    
        // 申请字符数组的内存空间
        char *chars = (char *)malloc(*chars_len);
        // 以2个单位遍历十六进制字符串中的每个字符，转换为对应的字符，并存入chars中
        // 61626364 => abcd
        for (int i = 0; i < hexstr_len-1; i=i+2)
        {
            sscanf(hexstr+i, "%02x", (unsigned int *)(chars+i/2));
        }
    
        // 返回字符数组
        return chars;
        
}